
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
// 
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

/**
 * AUTO-GENERATED FILE. DO NOT MODIFY.
 */

// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
// 
//   http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
import { __extends } from 'tslib';
import * as zrUtil from 'zrender/lib/core/util.js';
import AxisBuilder from './AxisBuilder.js';
import * as graphic from '../../util/graphic.js';
import * as singleAxisHelper from '../../coord/single/singleAxisHelper.js';
import AxisView from './AxisView.js';
import { rectCoordAxisBuildSplitArea, rectCoordAxisHandleRemove } from './axisSplitHelper.js';
var axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];
var selfBuilderAttrs = ['splitArea', 'splitLine'];

var SingleAxisView =
/** @class */
function (_super) {
	__extends(SingleAxisView, _super);

	function SingleAxisView() {
		var _this = _super !== null && _super.apply(this, arguments) || this;

		_this.type = SingleAxisView.type;
		_this.axisPointerClass = 'SingleAxisPointer';
		return _this;
	}

	SingleAxisView.prototype.render = function (axisModel, ecModel, api, payload) {
		var group = this.group;
		group.removeAll();
		var oldAxisGroup = this._axisGroup;
		this._axisGroup = new graphic.Group();
		var layout = singleAxisHelper.layout(axisModel);
		var axisBuilder = new AxisBuilder(axisModel, layout);
		zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);
		group.add(this._axisGroup);
		group.add(axisBuilder.getGroup());
		zrUtil.each(selfBuilderAttrs, function (name) {
			if (axisModel.get([name, 'show'])) {
				axisElementBuilders[name](this, this.group, this._axisGroup, axisModel);
			}
		}, this);
		graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);

		_super.prototype.render.call(this, axisModel, ecModel, api, payload);
	};

	SingleAxisView.prototype.remove = function () {
		rectCoordAxisHandleRemove(this);
	};

	SingleAxisView.type = 'singleAxis';
	return SingleAxisView;
}(AxisView);

var axisElementBuilders = {
	splitLine: function (axisView, group, axisGroup, axisModel) {
		var axis = axisModel.axis;

		if (axis.scale.isBlank()) {
			return;
		}

		var splitLineModel = axisModel.getModel('splitLine');
		var lineStyleModel = splitLineModel.getModel('lineStyle');
		var lineColors = lineStyleModel.get('color');
		lineColors = lineColors instanceof Array ? lineColors : [lineColors];
		var lineWidth = lineStyleModel.get('width');
		var gridRect = axisModel.coordinateSystem.getRect();
		var isHorizontal = axis.isHorizontal();
		var splitLines = [];
		var lineCount = 0;
		var ticksCoords = axis.getTicksCoords({
			tickModel: splitLineModel
		});
		var p1 = [];
		var p2 = [];

		for (var i = 0; i < ticksCoords.length; ++i) {
			var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);

			if (isHorizontal) {
				p1[0] = tickCoord;
				p1[1] = gridRect.y;
				p2[0] = tickCoord;
				p2[1] = gridRect.y + gridRect.height;
			} else {
				p1[0] = gridRect.x;
				p1[1] = tickCoord;
				p2[0] = gridRect.x + gridRect.width;
				p2[1] = tickCoord;
			}

			var line = new graphic.Line({
				shape: {
					x1: p1[0],
					y1: p1[1],
					x2: p2[0],
					y2: p2[1]
				},
				silent: true
			});
			graphic.subPixelOptimizeLine(line.shape, lineWidth);
			var colorIndex = lineCount++ % lineColors.length;
			splitLines[colorIndex] = splitLines[colorIndex] || [];
			splitLines[colorIndex].push(line);
		}

		var lineStyle = lineStyleModel.getLineStyle(['color']);

		for (var i = 0; i < splitLines.length; ++i) {
			group.add(graphic.mergePath(splitLines[i], {
				style: zrUtil.defaults({
					stroke: lineColors[i % lineColors.length]
				}, lineStyle),
				silent: true
			}));
		}
	},
	splitArea: function (axisView, group, axisGroup, axisModel) {
		rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, axisModel);
	}
};
export default SingleAxisView;